package com.foftact.etfhist.mapper;

import com.foftact.etfhist.ETFHistory;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * ETF历史净值Mapper接口
 * 用于操作etf_history表
 */
@Mapper
public interface ETFHistoryMapper {
    /**
     * 根据基金代码和净值日期查询单条记录
     * @param fundCode 基金代码
     * @param navDate 净值日期
     * @return ETF历史净值对象
     */
    ETFHistory selectByFundCodeAndDate(@Param("fundCode") String fundCode, @Param("navDate") Date navDate);

    /**
     * 根据基金代码和日期范围查询记录
     * @param fundCode 基金代码
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return ETF历史净值列表
     */
    List<ETFHistory> selectByFundCodeAndDateRange(@Param("fundCode") String fundCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询指定基金代码在指定周内的记录
     * @param fundCode 基金代码
     * @param startOfWeek 周开始日期
     * @param endOfWeek 周结束日期
     * @return 记录数量
     */
    int countByFundCodeAndWeek(@Param("fundCode") String fundCode, @Param("startOfWeek") Date startOfWeek, @Param("endOfWeek") Date endOfWeek);

    /**
     * 插入单条ETF历史净值数据
     * @param etfHistory ETF历史净值数据对象
     * @return 插入的行数
     */
    int insert(ETFHistory etfHistory);

    /**
     * 批量插入ETF历史净值数据
     * @param etfHistoryList ETF历史净值数据列表
     * @return 插入的行数
     */
    int batchInsert(@Param("list") List<ETFHistory> etfHistoryList);

    /**
     * 根据基金代码和净值日期更新ETF历史净值数据
     * @param etfHistory ETF历史净值数据对象
     * @return 更新的行数
     */
    int updateByFundCodeAndDate(ETFHistory etfHistory);

    /**
     * 根据基金代码和净值日期删除ETF历史净值数据
     * @param fundCode 基金代码
     * @param navDate 净值日期
     * @return 删除的行数
     */
    int deleteByFundCodeAndDate(@Param("fundCode") String fundCode, @Param("navDate") Date navDate);

    /**
     * 根据基金代码删除所有ETF历史净值数据
     * @param fundCode 基金代码
     * @return 删除的行数
     */
    int deleteByFundCode(@Param("fundCode") String fundCode);

    /**
     * 清空ETF历史净值表
     */
    void truncateTable();
}